import axios from '../index'

/**
 * 下载Tab API管理器
 */
class DownloadTabManager {
    constructor() {
        this.baseUrl = '/download'
    }
    // ========== 产品和设备列表相关 ==========
    /**
     * 获取产品列表
     * @returns {Promise<Object>} 产品列表响应
     */
    async getProductList() {
        console.log('🔍 [DownloadTabManager] 获取产品列表')
        try {
            const response = await axios.get(`${this.baseUrl}/products`)
            console.log('✅ [DownloadTabManager] 获取产品列表成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取产品列表失败:', error)
            throw error
        }
    }

    /**
     * 获取设备列表
     * @param {Object} params 查询参数
     * @returns {Promise<Object>} 设备列表响应
     */
    async getDeviceList(params = {}) {
        console.log('🔍 [DownloadTabManager] 获取设备列表', params)
        try {
            const response = await axios.get(`${this.baseUrl}/devices`, { params })
            console.log('✅ [DownloadTabManager] 获取设备列表成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取设备列表失败:', error)
            throw error
        }
    }

    /**
     * 获取透传端口
     * @returns {Promise<Object>} 透传端口响应
     */
    async getTransPorts(params) {
        console.log('🔍 [DownloadTabManager] 获取透传端口', params)
        try {
            const response = await axios.get(`${this.baseUrl}/trans-ports`, { params })
            console.log('✅ [DownloadTabManager] 获取透传端口成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取透传端口失败:', error)
            throw error
        }
    }

    /**
     * 获取详细设备列表
     * @param {Object} params 查询参数
     * @returns {Promise<Object>} 详细设备列表响应
     */
    async getDeviceDetailList(params) {
        console.log('🔍 [DownloadTabManager] 获取详细设备列表', params)
        try {
            const response = await axios.get(`${this.baseUrl}/device-detail`, { params })
            console.log('✅ [DownloadTabManager] 获取详细设备列表成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取详细设备列表失败:', error)
            throw error
        }
    }

    // ========== 连接相关 ==========
    /**
     * 串口连接
     * @param {Object} params 串口连接参数
     * @returns {Promise<Object>} 连接结果
     */
    async connectSerial(params) {
        console.log('🔌 [DownloadTabManager] 串口连接:', params)
        try {
            const response = await axios.post(`${this.baseUrl}/serial/connect`, params)
            console.log('✅ [DownloadTabManager] 串口连接成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 串口连接失败:', error)
            throw error
        }
    }

    /**
     * 网络连接
     * @param {Object} params 网络连接参数
     * @returns {Promise<Object>} 连接结果
     */
    async connectNetwork(params) {
        console.log('🔌 [DownloadTabManager] 网络连接:', params)
        try {
            const response = await axios.post(`${this.baseUrl}/network/connect`, params)
            console.log('✅ [DownloadTabManager] 网络连接成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 网络连接失败:', error)
            throw error
        }
    }

    // ========== 透传相关 ==========
    /**
     * 开始透传
     * @param {Object} params 透传参数
     * @returns {Promise<Object>} 透传结果
     */
    async startTransmission(params) {
        console.log('🚀 [DownloadTabManager] 开始透传:', params)
        try {
            const response = await axios.post(`${this.baseUrl}/transmission/start`, params)
            console.log('✅ [DownloadTabManager] 开始透传成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 开始透传失败:', error)
            throw error
        }
    }

    /**
     * 停止透传
     * @param {Object} params 透传参数
     * @returns {Promise<Object>} 停止结果
     */
    async stopTransmission(params) {
        console.log('🛑 [DownloadTabManager] 停止透传:', params)
        try {
            const response = await axios.post(`${this.baseUrl}/transmission/stop`, params)
            console.log('✅ [DownloadTabManager] 停止透传成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 停止透传失败:', error)
            throw error
        }
    }

    /**
     * 获取透传状态
     * @returns {Promise<Object>} 透传状态
     */
    async getTransmissionStatus() {
        console.log('📊 [DownloadTabManager] 获取透传状态')
        try {
            const response = await axios.get(`${this.baseUrl}/transmission/status`)
            console.log('✅ [DownloadTabManager] 获取透传状态成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取透传状态失败:', error)
            throw error
        }
    }

    // ========== 设备信息相关 ==========
    /**
     * 获取设备信息
     * @param {Object} params 查询参数
     * @returns {Promise<Object>} 设备信息
     */
    async getDeviceInfo(params) {
        console.log('📱 [DownloadTabManager] 获取设备信息:', params)
        try {
            const response = await axios.get(`${this.baseUrl}/device-info`, { params })
            console.log('✅ [DownloadTabManager] 获取设备信息成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 获取设备信息失败:', error)
            throw error
        }
    }

    /**
     * 更新设备信息
     * @param {Object} data 设备信息数据
     * @returns {Promise<Object>} 更新结果
     */
    async updateDeviceInfo(data) {
        console.log('📝 [DownloadTabManager] 更新设备信息:', data)
        try {
            const response = await axios.post(`${this.baseUrl}/device-info/update`, data)
            console.log('✅ [DownloadTabManager] 更新设备信息成功')
            return response
        } catch (error) {
            console.error('❌ [DownloadTabManager] 更新设备信息失败:', error)
            throw error
        }
    }
}

export default DownloadTabManager
